package thread;

/**
 * 静态方法锁
 * 在一个静态方法上如果使用synchronized后,
 */
public class SyncDemo3 {
    public static void main(String[] args) {
        //静态方法加锁,无论创不创建新对象该方法都是分开执行的.但一般都是类名打点访问
        //而成员方法加锁,当同一对象时该方法是分开执行,创建新对象时锁失效,同步执行
        Aoo aoo1 = new Aoo();
        Aoo aoo2 = new Aoo();

        Thread t1 = new Thread(){
            public void run(){
                aoo1.run();
            }
        };
        Thread t2 = new Thread(){
            public void run(){
                aoo2.run();
            }
        };
        t1.start();
        t2.start();

    }
}
class Aoo {
    //public synchronized static void run(){
    public static void run() {
        synchronized (Aoo.class) {//修饰静态方法语句块时,同步监视器对象为(类名.class)
            try {
                Thread t = Thread.currentThread();
                System.out.println(t.getName() + ":正在执行该方法");
                Thread.sleep(5000);
                System.out.println(t.getName() + ":该方法执行完毕");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}